/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package conceitos.DAO;

import conceitos.modelo.entidades.Personagem;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;

/**
 *
 * @author jeferson
 */
public class PersonagemDAO {
    private Connection conexao;

    public PersonagemDAO() {
        conexao = Conexao.getInstance();
    }

    // new id
    private Integer newIdPersonagem() throws SQLException {
        String sql = "select nextval('personagem_idpersonagem_seq') as new";
        ResultSet rs = conexao.createStatement().executeQuery(sql);
        if (!rs.next()) {
            rs.close();
            return null;
        }
        return rs.getInt("new");
    }
    
    // insert
    public boolean insert(Personagem personagem){
        String sql = "insert into personagem (idpersonagem, idconta, nome, sexo, imagem) values(?,?,?,?,?)";
        try {
            personagem.setIdPersonagem(newIdPersonagem());
            PreparedStatement ps = conexao.prepareStatement(sql);
            ps.setInt(1, personagem.getIdPersonagem());
            ps.setInt(2, personagem.getIdConta());
            ps.setString(3, personagem.getNomePersonagem());
            ps.setString(4, personagem.getSexoPersonagem());
            ps.setBytes(5, personagem.getImagemPersonagem());
            int retorno = ps.executeUpdate();
            conexao.commit();
            if (retorno > 0) {
                return true;
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
        }

        return false;
    }

    // delete
    public boolean delete(Integer idPersonagem) {
        String sql = "delete from personagem where idPersonagem = ?";
        try {
            PreparedStatement ps = conexao.prepareStatement(sql);
            ps.setObject(1, idPersonagem);
            if (ps.executeUpdate() > 0) {
                return true;
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
        }
        return false;
    }
    
    public Personagem select(String filtro) {
        if (filtro == null || filtro.trim().isEmpty()) {
            filtro = "1 = 1";
        }
        String sql = "select * from personagem where " + filtro;
        try {
            Personagem personagem = null;
            ResultSet rs = conexao.createStatement().executeQuery(sql);
            while (rs.next()) {
                personagem = new Personagem();
                if (rs.isLast()) {
                    personagem.setIdPersonagem(rs.getInt("idpersonagem"));
                    personagem.setIdConta(rs.getInt("idconta"));
                    personagem.setNomePersonagem(rs.getString("nome"));
                    personagem.setSexoPersonagem(rs.getString("sexo"));
                    personagem.setImagemPersonagem(rs.getBytes("imagem"));
                }
            }
            rs.close();
            return personagem;
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
        }
        return null;
    }
}
